﻿using System;
using System.Collections.Generic;
using System.Text;

namespace PCDoctor.ScanParameters
{
    class ProblemSolver {
        /// <summary>
        /// Событие "просканирована очередная проблема"
        /// </summary>
        public event FixProgress FixProgressed;

        protected virtual void OnFixProgressed(FixProgressEventArgs e)
        {
            FixProgressed(this, e);
        }

        /// <summary>
        /// Полное количество проблем по всем пунктам
        /// </summary>
        public int TotalProblems { get; set; }

        /// <summary>
        /// Сканирование проблем по списку параметров
        /// </summary>
        /// <param name="parameters">Список параметров</param>
        public void Fix(List<ScanParameter> parameters)
        {
            TotalProblems = 0;
            int total = parameters.Count;
            int i = 0;
            foreach (ScanParameter sp in parameters)
            {
                i++;
                sp.Fix();
                TotalProblems += sp.ProblemsCount;
                OnFixProgressed(new FixProgressEventArgs
                {
                    Progress = (float)Math.Round(((double)i / total * 100), 1),
                    Result = sp.FixResult,
                    ProblemName = sp.Name,
                    ProblemsCount = sp.ProblemsCount,
                    FixedProblems = sp.FixedProblems
                });
            }
        }
    }

    /// <summary>
    /// Класс аргументов события "Просканирована очередная проблема"
    /// </summary>
    public class FixProgressEventArgs : EventArgs
    {
        public float Progress { get; set; }
        public FixationResult Result { get; set; }
        public string ProblemName { get; set; }
        public int FixedProblems { get; set; }
        public int ProblemsCount { get; set; }
    }

    public delegate void FixProgress(object sender, FixProgressEventArgs e);
}
